<?php
namespace Personnelsystem\Controller;

use Think\Controller;
header("content-type:text/html;charset=utf-8");

class CalendarsController extends StatisticsController
{

    var $MIN_YEAR = 1891;

    var $MAX_YEAR = 2100;

    var $lunarInfo = array(
        array(
            0,
            2,
            9,
            21936
        ),
        array(
            6,
            1,
            30,
            9656
        ),
        array(
            0,
            2,
            17,
            9584
        ),
        array(
            0,
            2,
            6,
            21168
        ),
        array(
            5,
            1,
            26,
            43344
        ),
        array(
            0,
            2,
            13,
            59728
        ),
        array(
            0,
            2,
            2,
            27296
        ),
        array(
            3,
            1,
            22,
            44368
        ),
        array(
            0,
            2,
            10,
            43856
        ),
        array(
            8,
            1,
            30,
            19304
        ),
        array(
            0,
            2,
            19,
            19168
        ),
        array(
            0,
            2,
            8,
            42352
        ),
        array(
            5,
            1,
            29,
            21096
        ),
        array(
            0,
            2,
            16,
            53856
        ),
        array(
            0,
            2,
            4,
            55632
        ),
        array(
            4,
            1,
            25,
            27304
        ),
        array(
            0,
            2,
            13,
            22176
        ),
        array(
            0,
            2,
            2,
            39632
        ),
        array(
            2,
            1,
            22,
            19176
        ),
        array(
            0,
            2,
            10,
            19168
        ),
        array(
            6,
            1,
            30,
            42200
        ),
        array(
            0,
            2,
            18,
            42192
        ),
        array(
            0,
            2,
            6,
            53840
        ),
        array(
            5,
            1,
            26,
            54568
        ),
        array(
            0,
            2,
            14,
            46400
        ),
        array(
            0,
            2,
            3,
            54944
        ),
        array(
            2,
            1,
            23,
            38608
        ),
        array(
            0,
            2,
            11,
            38320
        ),
        array(
            7,
            2,
            1,
            18872
        ),
        array(
            0,
            2,
            20,
            18800
        ),
        array(
            0,
            2,
            8,
            42160
        ),
        array(
            5,
            1,
            28,
            45656
        ),
        array(
            0,
            2,
            16,
            27216
        ),
        array(
            0,
            2,
            5,
            27968
        ),
        array(
            4,
            1,
            24,
            44456
        ),
        array(
            0,
            2,
            13,
            11104
        ),
        array(
            0,
            2,
            2,
            38256
        ),
        array(
            2,
            1,
            23,
            18808
        ),
        array(
            0,
            2,
            10,
            18800
        ),
        array(
            6,
            1,
            30,
            25776
        ),
        array(
            0,
            2,
            17,
            54432
        ),
        array(
            0,
            2,
            6,
            59984
        ),
        array(
            5,
            1,
            26,
            27976
        ),
        array(
            0,
            2,
            14,
            23248
        ),
        array(
            0,
            2,
            4,
            11104
        ),
        array(
            3,
            1,
            24,
            37744
        ),
        array(
            0,
            2,
            11,
            37600
        ),
        array(
            7,
            1,
            31,
            51560
        ),
        array(
            0,
            2,
            19,
            51536
        ),
        array(
            0,
            2,
            8,
            54432
        ),
        array(
            6,
            1,
            27,
            55888
        ),
        array(
            0,
            2,
            15,
            46416
        ),
        array(
            0,
            2,
            5,
            22176
        ),
        array(
            4,
            1,
            25,
            43736
        ),
        array(
            0,
            2,
            13,
            9680
        ),
        array(
            0,
            2,
            2,
            37584
        ),
        array(
            2,
            1,
            22,
            51544
        ),
        array(
            0,
            2,
            10,
            43344
        ),
        array(
            7,
            1,
            29,
            46248
        ),
        array(
            0,
            2,
            17,
            27808
        ),
        array(
            0,
            2,
            6,
            46416
        ),
        array(
            5,
            1,
            27,
            21928
        ),
        array(
            0,
            2,
            14,
            19872
        ),
        array(
            0,
            2,
            3,
            42416
        ),
        array(
            3,
            1,
            24,
            21176
        ),
        array(
            0,
            2,
            12,
            21168
        ),
        array(
            8,
            1,
            31,
            43344
        ),
        array(
            0,
            2,
            18,
            59728
        ),
        array(
            0,
            2,
            8,
            27296
        ),
        array(
            6,
            1,
            28,
            44368
        ),
        array(
            0,
            2,
            15,
            43856
        ),
        array(
            0,
            2,
            5,
            19296
        ),
        array(
            4,
            1,
            25,
            42352
        ),
        array(
            0,
            2,
            13,
            42352
        ),
        array(
            0,
            2,
            2,
            21088
        ),
        array(
            3,
            1,
            21,
            59696
        ),
        array(
            0,
            2,
            9,
            55632
        ),
        array(
            7,
            1,
            30,
            23208
        ),
        array(
            0,
            2,
            17,
            22176
        ),
        array(
            0,
            2,
            6,
            38608
        ),
        array(
            5,
            1,
            27,
            19176
        ),
        array(
            0,
            2,
            15,
            19152
        ),
        array(
            0,
            2,
            3,
            42192
        ),
        array(
            4,
            1,
            23,
            53864
        ),
        array(
            0,
            2,
            11,
            53840
        ),
        array(
            8,
            1,
            31,
            54568
        ),
        array(
            0,
            2,
            18,
            46400
        ),
        array(
            0,
            2,
            7,
            46752
        ),
        array(
            6,
            1,
            28,
            38608
        ),
        array(
            0,
            2,
            16,
            38320
        ),
        array(
            0,
            2,
            5,
            18864
        ),
        array(
            4,
            1,
            25,
            42168
        ),
        array(
            0,
            2,
            13,
            42160
        ),
        array(
            10,
            2,
            2,
            45656
        ),
        array(
            0,
            2,
            20,
            27216
        ),
        array(
            0,
            2,
            9,
            27968
        ),
        array(
            6,
            1,
            29,
            44448
        ),
        array(
            0,
            2,
            17,
            43872
        ),
        array(
            0,
            2,
            6,
            38256
        ),
        array(
            5,
            1,
            27,
            18808
        ),
        array(
            0,
            2,
            15,
            18800
        ),
        array(
            0,
            2,
            4,
            25776
        ),
        array(
            3,
            1,
            23,
            27216
        ),
        array(
            0,
            2,
            10,
            59984
        ),
        array(
            8,
            1,
            31,
            27432
        ),
        array(
            0,
            2,
            19,
            23232
        ),
        array(
            0,
            2,
            7,
            43872
        ),
        array(
            5,
            1,
            28,
            37736
        ),
        array(
            0,
            2,
            16,
            37600
        ),
        array(
            0,
            2,
            5,
            51552
        ),
        array(
            4,
            1,
            24,
            54440
        ),
        array(
            0,
            2,
            12,
            54432
        ),
        array(
            0,
            2,
            1,
            55888
        ),
        array(
            2,
            1,
            22,
            23208
        ),
        array(
            0,
            2,
            9,
            22176
        ),
        array(
            7,
            1,
            29,
            43736
        ),
        array(
            0,
            2,
            18,
            9680
        ),
        array(
            0,
            2,
            7,
            37584
        ),
        array(
            5,
            1,
            26,
            51544
        ),
        array(
            0,
            2,
            14,
            43344
        ),
        array(
            0,
            2,
            3,
            46240
        ),
        array(
            4,
            1,
            23,
            46416
        ),
        array(
            0,
            2,
            10,
            44368
        ),
        array(
            9,
            1,
            31,
            21928
        ),
        array(
            0,
            2,
            19,
            19360
        ),
        array(
            0,
            2,
            8,
            42416
        ),
        array(
            6,
            1,
            28,
            21176
        ),
        array(
            0,
            2,
            16,
            21168
        ),
        array(
            0,
            2,
            5,
            43312
        ),
        array(
            4,
            1,
            25,
            29864
        ),
        array(
            0,
            2,
            12,
            27296
        ),
        array(
            0,
            2,
            1,
            44368
        ),
        array(
            2,
            1,
            22,
            19880
        ),
        array(
            0,
            2,
            10,
            19296
        ),
        array(
            6,
            1,
            29,
            42352
        ),
        array(
            0,
            2,
            17,
            42208
        ),
        array(
            0,
            2,
            6,
            53856
        ),
        array(
            5,
            1,
            26,
            59696
        ),
        array(
            0,
            2,
            13,
            54576
        ),
        array(
            0,
            2,
            3,
            23200
        ),
        array(
            3,
            1,
            23,
            27472
        ),
        array(
            0,
            2,
            11,
            38608
        ),
        array(
            11,
            1,
            31,
            19176
        ),
        array(
            0,
            2,
            19,
            19152
        ),
        array(
            0,
            2,
            8,
            42192
        ),
        array(
            6,
            1,
            28,
            53848
        ),
        array(
            0,
            2,
            15,
            53840
        ),
        array(
            0,
            2,
            4,
            54560
        ),
        array(
            5,
            1,
            24,
            55968
        ),
        array(
            0,
            2,
            12,
            46496
        ),
        array(
            0,
            2,
            1,
            22224
        ),
        array(
            2,
            1,
            22,
            19160
        ),
        array(
            0,
            2,
            10,
            18864
        ),
        array(
            7,
            1,
            30,
            42168
        ),
        array(
            0,
            2,
            17,
            42160
        ),
        array(
            0,
            2,
            6,
            43600
        ),
        array(
            5,
            1,
            26,
            46376
        ),
        array(
            0,
            2,
            14,
            27936
        ),
        array(
            0,
            2,
            2,
            44448
        ),
        array(
            3,
            1,
            23,
            21936
        ),
        array(
            0,
            2,
            11,
            37744
        ),
        array(
            8,
            2,
            1,
            18808
        ),
        array(
            0,
            2,
            19,
            18800
        ),
        array(
            0,
            2,
            8,
            25776
        ),
        array(
            6,
            1,
            28,
            27216
        ),
        array(
            0,
            2,
            15,
            59984
        ),
        array(
            0,
            2,
            4,
            27424
        ),
        array(
            4,
            1,
            24,
            43872
        ),
        array(
            0,
            2,
            12,
            43744
        ),
        array(
            0,
            2,
            2,
            37600
        ),
        array(
            3,
            1,
            21,
            51568
        ),
        array(
            0,
            2,
            9,
            51552
        ),
        array(
            7,
            1,
            29,
            54440
        ),
        array(
            0,
            2,
            17,
            54432
        ),
        array(
            0,
            2,
            5,
            55888
        ),
        array(
            5,
            1,
            26,
            23208
        ),
        array(
            0,
            2,
            14,
            22176
        ),
        array(
            0,
            2,
            3,
            42704
        ),
        array(
            4,
            1,
            23,
            21224
        ),
        array(
            0,
            2,
            11,
            21200
        ),
        array(
            8,
            1,
            31,
            43352
        ),
        array(
            0,
            2,
            19,
            43344
        ),
        array(
            0,
            2,
            7,
            46240
        ),
        array(
            6,
            1,
            27,
            46416
        ),
        array(
            0,
            2,
            15,
            44368
        ),
        array(
            0,
            2,
            5,
            21920
        ),
        array(
            4,
            1,
            24,
            42448
        ),
        array(
            0,
            2,
            12,
            42416
        ),
        array(
            0,
            2,
            2,
            21168
        ),
        array(
            3,
            1,
            22,
            43320
        ),
        array(
            0,
            2,
            9,
            26928
        ),
        array(
            7,
            1,
            29,
            29336
        ),
        array(
            0,
            2,
            17,
            27296
        ),
        array(
            0,
            2,
            6,
            44368
        ),
        array(
            5,
            1,
            26,
            19880
        ),
        array(
            0,
            2,
            14,
            19296
        ),
        array(
            0,
            2,
            3,
            42352
        ),
        array(
            4,
            1,
            24,
            21104
        ),
        array(
            0,
            2,
            10,
            53856
        ),
        array(
            8,
            1,
            30,
            59696
        ),
        array(
            0,
            2,
            18,
            54560
        ),
        array(
            0,
            2,
            7,
            55968
        ),
        array(
            6,
            1,
            27,
            27472
        ),
        array(
            0,
            2,
            15,
            22224
        ),
        array(
            0,
            2,
            5,
            19168
        ),
        array(
            4,
            1,
            25,
            42216
        ),
        array(
            0,
            2,
            12,
            42192
        ),
        array(
            0,
            2,
            1,
            53584
        ),
        array(
            2,
            1,
            21,
            55592
        ),
        array(
            0,
            2,
            9,
            54560
        )
    );

    function convertSolarToLunar($year, $month, $date)
    { // debugger;
        $yearData = $this->lunarInfo[$year - $this->MIN_YEAR];
        if ($year == $this->MIN_YEAR && $month <= 2 && $date <= 9) {
            return array(
                1891,
                '正月',
                '初一',
                '辛卯',
                1,
                1,
                '兔'
            );
        }
        return $this->getLunarByBetween($year, $this->getDaysBetweenSolar($year, $month, $date, $yearData[1], $yearData[2]));
    }

    function convertSolarMonthToLunar($year, $month)
    {
        $yearData = $this->lunarInfo[$year - $this->MIN_YEAR];
        if ($year == $this->MIN_YEAR && $month <= 2 && $date <= 9) {
            return array(
                1891,
                '正月',
                '初一',
                '辛卯',
                1,
                1,
                '兔'
            );
        }
        $month_days_ary = array(
            31,
            28,
            31,
            30,
            31,
            30,
            31,
            31,
            30,
            31,
            30,
            31
        );
        $dd = $month_days_ary[$month];
        if ($this->isLeapYear($year) && $month == 2)
            $dd ++;
        $lunar_ary = array();
        for ($i = 1; $i < $dd; $i ++) {
            $array = $this->getLunarByBetween($year, $this->getDaysBetweenSolar($year, $month, $i, $yearData[1], $yearData[2]));
            $array[] = $year . '-' . $month . '-' . $i;
            $lunar_ary[$i] = $array;
        }
        return $lunar_ary;
    }

    function convertLunarToSolar($year, $month, $date)
    {
        $yearData = $this->lunarInfo[$year - $this->MIN_YEAR];
        $between = $this->getDaysBetweenLunar($year, $month, $date);
        $res = mktime(0, 0, 0, $yearData[1], $yearData[2], $year);
        $res = date('Y-m-d', $res + $between * 24 * 60 * 60);
        $day = explode('-', $res);
        $year = $day[0];
        $month = $day[1];
        $day = $day[2];
        return array(
            $year,
            $month,
            $day
        );
    }

    function isLeapYear($year)
    {
        return (($year % 4 == 0 && $year % 100 != 0) || ($year % 400 == 0));
    }

    function getLunarYearName($year)
    {
        $sky = array(
            '庚',
            '辛',
            '壬',
            '癸',
            '甲',
            '乙',
            '丙',
            '丁',
            '戊',
            '己'
        );
        $earth = array(
            '申',
            '酉',
            '戌',
            '亥',
            '子',
            '丑',
            '寅',
            '卯',
            '辰',
            '巳',
            '午',
            '未'
        );
        $year = $year . '';
        return $sky[$year{3}] . $earth[$year % 12];
    }

    function getYearZodiac($year)
    {
        $zodiac = array(
            '猴',
            '鸡',
            '狗',
            '猪',
            '鼠',
            '牛',
            '虎',
            '兔',
            '龙',
            '蛇',
            '马',
            '羊'
        );
        return $zodiac[$year % 12];
    }

    function getSolarMonthDays($year, $month)
    {
        $monthHash = array(
            '1' => 31,
            '2' => $this->isLeapYear($year) ? 29 : 28,
            '3' => 31,
            '4' => 30,
            '5' => 31,
            '6' => 30,
            '7' => 31,
            '8' => 31,
            '9' => 30,
            '10' => 31,
            '11' => 30,
            '12' => 31
        );
        return $monthHash["$month"];
    }

    function getLunarMonthDays($year, $month)
    {
        $monthData = $this->getLunarMonths($year);
        return $monthData[$month - 1];
    }

    function getLunarMonths($year)
    {
        $yearData = $this->lunarInfo[$year - $this->MIN_YEAR];
        $leapMonth = $yearData[0];
        $bit = decbin($yearData[3]);
        for ($i = 0; $i < strlen($bit); $i ++) {
            $bitArray[$i] = substr($bit, $i, 1);
        }
        for ($k = 0, $klen = 16 - count($bitArray); $k < $klen; $k ++) {
            array_unshift($bitArray, '0');
        }
        $bitArray = array_slice($bitArray, 0, ($leapMonth == 0 ? 12 : 13));
        for ($i = 0; $i < count($bitArray); $i ++) {
            $bitArray[$i] = $bitArray[$i] + 29;
        }
        return $bitArray;
    }

    function getLunarYearDays($year)
    {
        $yearData = $this->lunarInfo[$year - $this->MIN_YEAR];
        $monthArray = $this->getLunarYearMonths($year);
        $len = count($monthArray);
        return ($monthArray[$len - 1] == 0 ? $monthArray[$len - 2] : $monthArray[$len - 1]);
    }

    function getLunarYearMonths($year)
    { // debugger;
        $monthData = $this->getLunarMonths($year);
        $res = array();
        $temp = 0;
        $yearData = $this->lunarInfo[$year - $this->MIN_YEAR];
        $len = ($yearData[0] == 0 ? 12 : 13);
        for ($i = 0; $i < $len; $i ++) {
            $temp = 0;
            for ($j = 0; $j <= $i; $j ++) {
                $temp += $monthData[$j];
            }
            array_push($res, $temp);
        }
        return $res;
    }

    function getLeapMonth($year)
    {
        $yearData = $this->lunarInfo[$year - $this->MIN_YEAR];
        return $yearData[0];
    }

    function getDaysBetweenLunar($year, $month, $date)
    {
        $yearMonth = $this->getLunarMonths($year);
        $res = 0;
        for ($i = 1; $i < $month; $i ++) {
            $res += $yearMonth[$i - 1];
        }
        $res += $date - 1;
        return $res;
    }

    function getDaysBetweenSolar($year, $cmonth, $cdate, $dmonth, $ddate)
    {
        $a = mktime(0, 0, 0, $cmonth, $cdate, $year);
        $b = mktime(0, 0, 0, $dmonth, $ddate, $year);
        return ceil(($a - $b) / 24 / 3600);
    }

    function getLunarByBetween($year, $between)
    { // debugger;
        $lunarArray = array();
        $yearMonth = array();
        $t = 0;
        $e = 0;
        $leapMonth = 0;
        $m = '';
        if ($between == 0) {
            array_push($lunarArray, $year, '正月', '初一');
            $t = 1;
            $e = 1;
        } else {
            $year = $between > 0 ? $year : ($year - 1);
            $yearMonth = $this->getLunarYearMonths($year);
            $leapMonth = $this->getLeapMonth($year);
            $between = $between > 0 ? $between : ($this->getLunarYearDays($year) + $between);
            for ($i = 0; $i < 13; $i ++) {
                if ($between == $yearMonth[$i]) {
                    $t = $i + 2;
                    $e = 1;
                    break;
                } else 
                    if ($between < $yearMonth[$i]) {
                        $t = $i + 1;
                        $e = $between - (empty($yearMonth[$i - 1]) ? 0 : $yearMonth[$i - 1]) + 1;
                        break;
                    }
            }
            $m = ($leapMonth != 0 && $t == $leapMonth + 1) ? ('闰' . $this->getCapitalNum($t - 1, true)) : $this->getCapitalNum(($leapMonth != 0 && $leapMonth + 1 < $t ? ($t - 1) : $t), true);
            array_push($lunarArray, $year, $m, $this->getCapitalNum($e, false));
        }
        array_push($lunarArray, $this->getLunarYearName($year)); // 天干地支
        array_push($lunarArray, $t, $e);
        array_push($lunarArray, $this->getYearZodiac($year)); // 12生肖
        array_push($lunarArray, $leapMonth); // 闰几月
        return $lunarArray;
    }

    function getCapitalNum($num, $isMonth)
    {
        $isMonth = $isMonth || false;
        $dateHash = array(
            '0' => '',
            '1' => '一',
            '2' => '二',
            '3' => '三',
            '4' => '四',
            '5' => '五',
            '6' => '六',
            '7' => '七',
            '8' => '八',
            '9' => '九',
            '10' => '十 '
        );
        $monthHash = array(
            '0' => '',
            '1' => '正月',
            '2' => '二月',
            '3' => '三月',
            '4' => '四月',
            '5' => '五月',
            '6' => '六月',
            '7' => '七月',
            '8' => '八月',
            '9' => '九月',
            '10' => '十月',
            '11' => '冬月',
            '12' => '腊月'
        );
        $res = '';
        if ($isMonth) {
            $res = $monthHash[$num];
        } else {
            if ($num <= 10) {
                $res = '初' . $dateHash[$num];
            } else 
                if ($num > 10 && $num < 20) {
                    $res = '十' . $dateHash[$num - 10];
                } else 
                    if ($num == 20) {
                        $res = "二十";
                    } else 
                        if ($num > 20 && $num < 30) {
                            $res = "廿" . $dateHash[$num - 20];
                        } else 
                            if ($num == 30) {
                                $res = "三十";
                            }
        }
        return $res;
    }

    public function NowToday()
    {
        $nowDays = new CalendarsController();
        $nowDay = date("Y-m-d");
        $ResultDay = explode("-", $nowDay);
        $NowMoreDay = $nowDays->convertSolarToLunar($ResultDay[0], $ResultDay[1], $ResultDay[2]); // 将阳历转换为阴历
        $ResultNowDay = "今天是公历：" . $ResultDay[0] . " 年 " . $ResultDay[1] . " 月 " . $ResultDay[2] . " 日 &nbsp;&nbsp;"."&nbsp;&nbsp;&nbsp;&nbsp;";
        // 农历：. $NowMoreDay[3] . "&nbsp;(&nbsp;" . $NowMoreDay[0] . "&nbsp;)&nbsp; 年 &nbsp;" . $NowMoreDay[1] . "&nbsp;" . $NowMoreDay[2] . //"&nbsp;&nbsp;&nbsp;&nbsp;";
        $this->assign("ResultNowDay", $ResultNowDay);
        
        // 算了，送佛送到西，还是给你做上生日提醒吧
        $staff = M("staff");
        // 首先我们来进行查询公历的生日
        $glDate = date("m-d");
        
        $glmap['stBirthdate'] = array(
            'like',
            "%" . $glDate . "%"
        );
        $glmap['stBirthdateType'] = 1;
        
        $rs_glBNum = $staff->where($glmap)->count();
        $this->assign("rs_glBNum", $rs_glBNum);
        if ($rs_glBNum > 0) {
            $rs_glB = $staff->where($glmap)->select();
            $this->assign("rs_glB", $rs_glB);
        }
        
        // 现在我们来做一下农历的生日提醒
        // 获取当前的农历时间
        $nlDate = $NowMoreDay[4] . "-" . $NowMoreDay[5];
        if ($NowMoreDay[4] < 10 && $NowMoreDay[5] < 10) {
            $nlDate = "0" . $NowMoreDay[4] . "-0" . $NowMoreDay[5];
        } elseif ($NowMoreDay[4] < 10 && $NowMoreDay[5] >= 10) {
            $nlDate = "0" . $NowMoreDay[4] . "-" . $NowMoreDay[5];
        } elseif ($NowMoreDay[4] >= 10 && $NowMoreDay[5] < 10) {
            $nlDate = $NowMoreDay[4] . "-0" . $NowMoreDay[5];
        }
        $this->assign("nlDate", $nlDate);
        $nlmap['stBirthdate'] = array(
            'like',
            "%" . $nlDate . "%"
        );
        $nlmap['stBirthdateType'] = 2;
        $rs_nlBNum = $staff->where($nlmap)->count();
        $this->assign("rs_nlBNum", $rs_nlBNum);
        if ($rs_nlBNum > 0) {
            $rs_nlB = $staff->where($nlmap)->select();
            $this->assign("rs_nlB", $rs_nlB);
        }
    }
}